<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .triangle{
            width: 0;
            height: 0;
            border-left: 50px solid transparent;
            border-right: 50px solid transparent;
            border-bottom: 100px solid red;
            /* transform: rotate(45deg); */
            /* border: solid 10px #000;
            border-color: transparent  #000 transparent transparent; */
            
        }
    </style>
</head>

<body>
    <div>
        <p id="show"></p>
        <button id="get">获取验证码</button>
        <div class="triangle"></div>
    </div>
    <script>
        //1.随机n个不重复的值
        // 完成uniqueNums(),该函数接收1个参数n（一个不大于31的整数），
        // 其返回值是一个数组，该数组内是 n 个随机且不重复的整数，且整数取值范围是 [2, 32]；
        // 例如：uniqueNums(3)  // return [19,7,10]
        // let arr=[];
        // function uniqueNums(n){

        //     if(n<=31){
        //         for(let i=0;i<n;i++){
        //             let num=Math.floor(Math.random()*31+2)  //32-2+1  +2
        //             arr.push(num);
        //         }
        //     }
        //     return arr;
        // }
        // console.log(uniqueNums(4))

        //2题目：双色球：
        // 描述：
        // 一注完整的双色球彩票号码由6个红色号码,1个蓝色号码组成(共7个数字)
        // 6个红色号码在[1-33]范围内随机产生, 1个蓝色号码在[1-16]范围内随机产生

        // 正确编写生成双色球号码函数createLottery,可以接收参数n
        // 对于createLottery函数,传入参数1,可以正确生成1注彩票号码并打印输出
        // 对于createLottery函数,传入参数5,可以正确生成5注彩票号码并打印输出
        // let red=0;
        // let blue=0;
        // function createLottery(n){
        //     // console.log(1)
        //     for(let i=0;i<n;i++){
        //         let str="";
        //         for(let j=0;j<6;j++){
        //             var red=Math.floor(Math.random()*33+1);
        //             str+=red+","
        //         }
        //         var blue=Math.floor(Math.random()*16+1);
        //         str+=blue
        //        console.log(str)
        //     }
        // }
        // createLottery(2)

        // var arr = [];
    //     function createLottery(n) {
    //             for (let z = 0; z < n; z++) {
    //                 let redNums=new Set();
    //                 while(redNums.size<6){
    //                     let num = Math.floor(Math.random() * 33 + 1);
    //                     redNums.add(num)
    //                 }
    //                 let bluenum= Math.floor(Math.random() * 16 + 1);
    //                 console.log(...Array.from(redNums),bluenum)
    //             }
    //     }
    //    createLottery(2)


    //3.题目：随机验证码颜色即大小
    //点击按钮，在div中显示一个，随机验证码，且验证码的颜色也是随机的；，随机验证码的字体大小为12-30px的随机大小
    // document.getElementById("get").onclick=()=>{
    //     let setnum= ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a"
    //     , "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
    //     let num=Math.random().toString(16).slice(-4).toUpperCase();
    //     document.getElementById("show").style.fontSize=Math.floor(Math.random()*21)+"px"
    //     document.getElementById("show").innerHTML=num;
    // }

    //4.题目：随机获取n个不重复的数组项
    // 描述，写randomArray函数，传递一个数组，传递一个数值，返回一个指定个数的随机的新数组，不允许有重复数据
    // 用例：
    // randomArray([
    //    '小明', '小红', '小绿', '小白', '小黄', '小蓝', '小黑', '小青'
    // ], 3)
    // 结果：['小红', '小白', '小明']
    // let newarr=[]
    // function randomArray(arr,num){
    //    while(true){
    //         if(newarr.length==num){
    //             break
    //         }else{
    //             let item=arr[Math.floor(Math.random()*arr.length)];
    //             newarr.push(item)
    //         }
    //    }
    //    console.log(newarr)
    //    return newarr
    // }
    // randomArray(['小明', '小红', '小绿', '小白', '小黄', '小蓝', '小黑', '小青' ],3)

    
//     let newarr=[];
//     function randomArray(arr,num){
//         // let set=new Set();
//          // 随机出来下表  0-arr.length-1
//         let b=new Set();
//         while (b.size < num) {
//             // arr.length-1-0-+1 +2
//             let index=Math.floor(Math.random()*arr.length);
//             if(!b.has(index)){
//                 b.add(index);
//                 newarr.push(arr[index])
//             }
//         }
//         // console.log(set)
//         return newarr
//     }
//    console.log( randomArray(['小明', '小红', '小绿', '小白', '小黄', '小蓝', '小黑', '小青'], 3))

        // 5.二维数组求和
        // 封装一个函数：实现求一个二维数组的和
        // let arr=[[1,2],[3,4]];
        // let he=0;
        // for(let i=0;i<arr.length;i++){
        //     for(let j=0;j<arr[i].length;j++){
        //         he+=arr[i][j];
        //     }
        // }
        // console.log(he)


        // 6.题目：变形
        var  arr = [[1,2,3,4],["A","B","C","D"],["东","南","西","北"]];                                                    
        // (1)Console.log(fun(arr)); 函数封装，打印出来如下效果                                                                                               
        //[[1,"A","东"],[2,"B","南"],[3,"C","西"],[4,"D","北"]];  
        // let newarr=[];
        function fun(arr){
            // for(let i=0;i<arr.length;i++){
            //    for(let j=0;j<arr[i].length;j++){
            //     console.log(arr[j][i])
            //     if(newarr.indexOf(arr[i][0])==-1){
            //         newarr.push(arr[i][0])
            //     }
            //     // console.log(newarr)
            //     // console.log(arr[i][j])
            //    }
            //    console.log(newarr)
            // }
            let newArr = []
            for (let i = 0; i < arr.length; i++) {
                for (let j = 0; j < arr[i].length; j++) {
                    // 先留位置
                    newArr[j] = []
                    newArr[j][i] = []
                }
            }
            for (let i = 0; i < arr.length; i++) {
                for (let j = 0; j < arr[i].length; j++) {
                     newArr[j][i] = arr[i][j]
                }
            }
            return newArr

        }
       console.log( fun(arr))

       //7. 封装一个函数,实现字符串转驼峰大小写将字符串"get-elements-by-tag-name",转换为驼峰形式getElementsByTagName
    //    function fun(){
    //         let str="get-elements-by-tag-name";
    //         let arr=str.split("-");
    //         console.log(arr)
    //         var a="get"
    //         for(let i=0;i<arr.length;i++){   
    //           if(arr[i]=="get"){
    //           }else{
    //             a+=arr[i][0].toUpperCase()+arr[i].slice(1)
    //           }
    //         }
    //         console.log(a)
    //    }
    //    fun()

    //8. 封装一个titleCase(str)函数，实现如下功能：确保字符串的每个单词首字母都大写，其余部分小写。
    //例如：titleCase("I'm a little tea pot"); //返回结果：I'm A Little Tea Pot
        // function titleCase(str){
        //     let arr=str.split(" ");
        //     console.log(arr)
        //     let a="";
        //     for(let i=0;i<arr.length;i++){
        //        a+=arr[i][0].toUpperCase()+arr[i].slice(1)+" "
        //     //    console.log(a)
        //     }
        //     console.log(a)
        // }
        // titleCase("I'm a little tea pot")
        
    //9.题目：大小写转换
    //封装一个函数，实现字符串大小写转换，如输入的为  ‘It is a Number’;输出为   ‘iT IS A nUMBER’
    // function fun(str){
    //     // console.log(str);
    //     let a="";
    //     for(let i=0;i<str.length;i++){
    //         if(str[i].toUpperCase()==str[i]){
    //             a+=str[i].toLowerCase();
    //         }else{
    //             a+=str[i].toUpperCase()
    //         }
    //     }
    //     console.log(a)
    // }
    // fun("It is a Number")

    //10. 题目：字符串去重
    // 编写函数uniq(str)，返回去掉str重复项的字符串。
    // 例如，uniq(‘12223333’)将返回’123’。
    // function uniq(str){
    //     let a="";
    //     for(let i=0;i<str.length;i++){
    //         // console.log(str[i]);
    //         if(a.indexOf(str[i])==-1){
    //             a+=str[i]
    //         }
    //     }
    //     console.log(a)
    // }
    // uniq("1211223333")

    //11、完成`getSum`,该函数接收1个数组作为参数，返回该数组中所有非重复数字的和;
    // 例如∶ `getSum([undefined,"23year" ,19,"097",1,"hello",null,1])`;
    // let count=0
    // function getSum(arr){
    //     for(let i=0;i<arr.length;i++){
    //         if(typeof arr[i]=="number"){
    //            count+=arr[i]
    //         }
    //     }
    //     console.log(count)
    // }
    // getSum([undefined,"23year" ,19,"097",1,"hello",null,1])

    //12、封装函数实现传入任意数组都可以返回统计每个元素在该数组中出现的次数(返回结果必须为对象形式)；
    // 例如 fun(["aa",1,"aa",6,"aa",6,6,1])
    // 返回结果{"aa":3,1:2,6:3,}
    //     function fun(arr){
    //        let obj={};
    //        for(let i=0;i<arr.length;i++){
    //         if(obj[arr[i]]){
    //             obj[arr[i]]++
    //         }else{
    //             obj[arr[i]]=1
    //         }
    //        }
    //        return obj
    //     }
    //    console.log( fun(["aa",1,"aa",6,"aa",6,6,1]))

    //13. 封装一个函数addBrackets,将传递过来的字符串str中的所有数字拼接上一对小括号(),非数字不拼接括号,将最终的字符串返回	
    //例如：var str = 'a4b2c 7d4xx8yy6'; 处理后 ==> a(4)b(2)c(7)d(4)xx(8)yy(6) 
    // A.正确定义函数并封装（5分）
    // B.完成指定功能（15）
    // let str1="";
    // function addBrackets(str){
    //     for(let i=0;i<str.length;i++){
    //         if(!isNaN(str[i])){
    //             str1+=`(${str[i]})`
    //         }else{
    //             str1+=str[i]
    //         }
            
    //     }
    //     console.log(str1)
    // }
    // var str = 'a4b2c7d4xx8yy6';
    // addBrackets(str)

    //14封装一个函数,实现字符串转驼峰大小写将字符串"get-elements-by-tag-name",转换为驼峰形式getElementsByTagName
    //    A.正确封装函数，并传入参数（5分）
    //    B.正确实现转换（15分）
    //    C.返回返回值并在控制台输出（5分）
    // let str1="";
    // function fun(str){
    //     let a=str.split("-");
    //     for(let i=0;i<a.length;i++){
    //         // console.log(a[i][0].toUpperCase())
    //         str1+=a[i][0].toUpperCase()+a[i].slice(1)
    //         // console.log(str1)
    //     }
    //     console.log(str1)
    // }
    // fun("get-elements-by-tag-name")

    //   15.定义函数fn()传入字符串  str="hello-tom-I-love-you" 求出字符串中最长和最短的元素
    // 	分别在页面输出格式为“最长的字符串为:hello”，“最短的字符串为:I”
    //   A.正确封装函数，并传入参数（5分）
    //   B.正确排序（10分）
    //   C.并找到最长和最短字符串（20分）
    //   D.正确输出最长和最短字符串（5分）
    // function fn(str){
    //     let arr=str.split("-");
    //     let max=arr[0];
    //     let min=arr[0];
    //     for(let i=0;i<arr.length;i++){
    //         console.log(arr[i].length);
    //        if(arr[i].length>max.length){
    //             max=arr[i]
    //        }else if(min.length>arr[i].length){
    //             min=arr[i]
    //        }
    //     }
    //     console.log(max,min)
    // }
    // fn("hello-tom-I-love-you")

    // 16.封装一个getMin(arr)函数，传入一个数组，找到这个数组中的最小值，和最小值的下标 ,
	//  例如：var	arr=[3,4,2,8,15,1,98]  最小值为:1，最小值的下标为5.
	// 正确封装函数getMin,正确传参数（8分）
	// 正确对数组进行排序（10分）
	// 正确找到数组中的最小值（10分）
	// 正确返回最小值的下标（10分）

    // function getMin(arr){
    //     let min=arr[0];
    //     let index=0;
    //     for(let i=0;i<arr.length;i++){
    //         if(arr[i]<min){
    //             min=arr[i]
    //             index=i
    //             // console.log(min,i)
    //         }
           
    //     }
    //     console.log(`最小值为:${min},最小值的下标为${index}.`)
    // }
    // getMin([3,4,2,8,15,1,98])


    // let ar=[1,10,100000,10];
    // let a=Math.max.apply(null,ar);
    // console.log(a)

    let test={
        a:1,
        b:2,
        init:function(){
            console.log(this,"外")
            document.addEventListener('click',function(){
                console.log(this,"里")
                
                this.getValue(this.a,this.b)
            }.bind(this))
        },
        getValue:function(a,b){
            return a+b
        }
    }
    test.init()
    </script>
</body>

</html>